// Copyright 2011-2012, Vanya Davidenko.
// Используемая кодировка: UTF-8.

#ifndef LIBV_FILE_LINUX_AFILE_IMPL_HPP_
#define LIBV_FILE_LINUX_AFILE_IMPL_HPP_

#ifndef __linux__
# error "This header should be used in Linux only."
#endif

#include <aio.h>
#include <libv/file/afile.h>



namespace libv
{

bool AFile::CancelAllImpl() const
{
    // Если все операции выполнены: AIO_ALLDONE
    // Если все операции отменены: AIO_CANCELED
    // Если хотя бы одна из операций сейчас выполняется и ее нельзя
    // прервать: AIO_NOTCANCELED. В таком случае статус операций можно
    // определить через ::aio_error() (RequestCompletionHandle::Status()).
    const bool result = ( ::aio_cancel(file_handle_, NULL) == AIO_CANCELED );
    last_error_ = errno;
    return result;
}

}  // libv

#endif  // LIBV_FILE_LINUX_AFILE_IMPL_HPP_
